package org.inspiration.dudu.content.service;

import org.inspiration.dudu.content.model.dto.AnswerDTO;
import org.inspiration.dudu.content.model.entity.AnswerEntity;
import org.inspiration.dudu.content.model.vo.AnswerVO;

import java.util.List;

/**
 * 答案服务接口
 * 提供与答案相关的业务逻辑处理
 */
public interface AnswerService {
    /**
     * 根据问题ID以升序获取所有答案
     *
     * @param questionId 问题ID
     * @param pageNum    页码
     * @param pageSize   每页大小
     * @return 答案视图对象列表
     */
    List<AnswerVO> getAnswersByQuestionIdOrderByASC(String questionId, Integer pageNum, Integer pageSize);

    /**
     * 将答案实体转换为答案视图对象
     *
     * @param answerEntity 答案实体
     * @return 答案视图对象
     */
    AnswerVO transToVO(AnswerEntity answerEntity);

    /**
     * 增加答案的点赞数量
     *
     * @param contentId 内容ID
     */
    void increaseLikeCount(String contentId);

    /**
     * 减少答案的点赞数量
     *
     * @param contentId 内容ID
     */
    void decreaseLikeCount(String contentId);

    /**
     * 根据内容ID获取用户ID
     *
     * @param contentId 内容ID
     * @return 用户ID
     */
    Long getUserIdByContentId(String contentId);

    /**
     * 根据内容ID获取答案
     *
     * @param contentId 内容ID
     * @return 答案视图对象
     */
    AnswerVO getAnswerByContentId(String contentId);

    /**
     * 增加答案的收藏数量
     *
     * @param contentId 内容ID
     */
    void increaseFavoriteCount(String contentId);

    /**
     * 减少答案的收藏数量
     *
     * @param contentId 内容ID
     */
    void decreaseFavoriteCount(String contentId);

    /**
     * 将答案数据传输对象转换为答案实体
     *
     * @param answerDTO       答案数据传输对象
     * @param contentFilePath 内容文件路径
     * @param uuid            唯一标识符
     * @return 答案实体
     */
    AnswerEntity transToEntity(AnswerDTO answerDTO, String contentFilePath, String uuid);

    /**
     * 创建答案
     *
     * @param answerEntity 答案实体
     */
    void createAnswer(AnswerEntity answerEntity);

    /**
     * 增加答案的评论数量
     *
     * @param contentId 内容ID
     */
    void increaseCommentCount(String contentId);

    /**
     * 根据问题ID以降序获取所有答案
     *
     * @param questionId 问题ID
     * @param pageNum    页码
     * @param pageSize   每页大小
     * @return 答案视图对象列表
     */
    List<AnswerVO> getAnswersByQuestionIdOrderByDESC(String questionId, Integer pageNum, Integer pageSize);

    /**
     * 根据ID获取答案
     *
     * @param id 答案ID
     * @return 答案视图对象
     */
    AnswerVO getAnswerById(String id);

    List<AnswerVO> getAnswersByUserIdOrderByDESC(Long userId, Integer pageNum, Integer pageSize);
}
